#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Git问题修复脚本
用于处理Windows系统特殊文件导致的Git提交问题
"""

import os
import subprocess
import sys


def fix_git_issues():
    """修复Git提交问题"""
    print("正在修复Git提交问题...")
    
    try:
        # 获取当前目录
        current_dir = os.getcwd()
        print(f"当前目录: {current_dir}")
        
        # 检查git状态
        print("\n检查当前Git状态:")
        result = subprocess.run(['git', 'status'], capture_output=True, text=True)
        print(result.stdout)
        
        # 检查是否存在nul文件
        nul_path = os.path.join(current_dir, 'nul')
        if os.path.exists(nul_path):
            print("发现nul文件，尝试处理...")
            # 由于nul是特殊文件，使用git rm -f强制移除
            try:
                subprocess.run(['git', 'rm', '-f', 'nul'], capture_output=True)
                print("已从Git中移除nul文件")
            except:
                print("无法直接删除nul文件，尝试其他方法...")
        
        # 创建或更新.gitignore以忽略nul文件
        gitignore_path = os.path.join(current_dir, '.gitignore')
        nul_entry = 'nul\n'
        
        if os.path.exists(gitignore_path):
            with open(gitignore_path, 'r', encoding='utf-8') as f:
                content = f.read()
            
            if 'nul' not in content:
                with open(gitignore_path, 'a', encoding='utf-8') as f:
                    f.write('\n# Windows特殊文件\nnul\n')
                print("已更新.gitignore文件")
        else:
            with open(gitignore_path, 'w', encoding='utf-8') as f:
                f.write('# Windows特殊文件\nnul\n')
            print("已创建.gitignore文件")
        
        # 清理git缓存
        print("清理Git缓存...")
        subprocess.run(['git', 'rm', '--cached', '-r', '.'], capture_output=True)
        subprocess.run(['git', 'add', '.'], capture_output=True)
        
        # 再次检查状态
        print("\n修复后的Git状态:")
        result = subprocess.run(['git', 'status'], capture_output=True, text=True)
        print(result.stdout)
        
        print("\n修复完成！现在您可以正常提交代码了。")
        print("建议使用: git add . 然后 git commit -m 'your message'")
        
    except Exception as e:
        print(f"修复过程中出现错误: {e}")
        print("请手动执行以下命令:")
        print("1. git rm --cached nul")
        print("2. 在.gitignore中添加 'nul'")
        print("3. git add .")


def manual_fix():
    """手动修复步骤"""
    print("\n手动修复步骤:")
    print("1. 打开命令提示符或PowerShell")
    print("2. 导航到项目目录")
    print("3. 执行以下命令:")
    print()
    print("   git rm --cached nul 2>nul || echo nul文件不存在或已移除")
    print("   echo nul >> .gitignore")
    print("   git add .gitignore")
    print("   git add .")
    print("   git status")


if __name__ == "__main__":
    if len(sys.argv) > 1 and sys.argv[1] == '--manual':
        manual_fix()
    else:
        fix_git_issues()
    
    input("\n按任意键退出...")